
#include "nane/core/crt/ModuleManager.h"
#include "nane/core/crt/ModuleManagerImpl_.h"

#include <cassert>

namespace nane
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    template<>
    IModuleSystem* Holder<IModuleSystem>::s_instance = NULL;
    ////////////////////////////////////////////////////////////////////////////////////////////////
    bool ModuleManager::Initialize()
    {
        assert( nane::m_context );
        assert( nane::m_context->moduleSystem == NULL );
        nane::m_context->moduleSystem = new Implementation();
        if( nane::m_context->moduleSystem->Initialize() == false )
        {
            Shutdown();
        }
        return true;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void ModuleManager::Shutdown()
    {
        if( nane::m_context->moduleSystem != NULL )
        {
            nane::m_context->moduleSystem->Shutdown();
        }
        delete static_cast<Implementation*>(nane::m_context->moduleSystem);
        nane::m_context->moduleSystem = NULL;
        Holder<IModuleSystem>::Clear();
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
